home *** CD-ROM | disk | FTP | other *** search
- Subject: v24i078: SystemVr4/386 SLIP driver and utilities, Part01/04
- Newsgroups: comp.sources.unix
- Approved: rsalz@uunet.UU.NET
- X-Checksum-Snefru: e28a84ba 973ccfe3 1400dc68 5d4e27b6
-
- Submitted-by: sudji@indo.intel.com (Sudji Husodo)
- Posting-number: Volume 24, Issue 78
- Archive-name: sysVr4386slip/part01
-
- [ I repacked this, but have not tested it. It might run on other SysVr4
- systems without too many changes. --r$ ]
-
- This package contains a SLIP driver and related utilities for Unix System
- V/386 Release 4.0. SLIP is a protocol that lets you run the IP (and
- related) network protocols over a standard serial line.
-
- The utility programs include:
- +slattach, to link the SLIP streams driver to the serial port, and the
- IP driver to the SLIP driver.
- +slhangup and slhangupd, to process hangup messages.
- +dialslip, to allow hosts to dial in and start SLIP sessions.
-
- #! /bin/sh
- # This is a shell archive. Remove anything before this line, then feed it
- # into a shell via "sh file" or similar. To overwrite existing files,
- # type "sh file -c".
- # The tool that generated this appeared in the comp.sources.unix newsgroup;
- # send mail to comp-sources-unix@uunet.uu.net if you want that tool.
- # Contents: PACKNOTES README MANIFEST dialslip driver driver/ID
- # driver/io driver/io/slip.c driver/sys driver/v2.ip.fix
- # driver/v2.ip.fix/Driver.UU.02 man man/man1 man/man7 utils
- # Wrapped by rsalz@litchi.bbn.com on Fri Mar 22 11:57:10 1991
- PATH=/bin:/usr/bin:/usr/ucb ; export PATH
- echo If this archive is complete, you will see the following message:
- echo ' "shar: End of archive 1 (of 4)."'
- if test -f 'PACKNOTES' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'PACKNOTES'\"
- else
- echo shar: Extracting \"'PACKNOTES'\" \(242 characters\)
- sed "s/^X//" >'PACKNOTES' <<'END_OF_FILE'
- X
- X# "driver/v2.ip.fix//Driver.o.UU" was split into 2 parts; to create it, do
- X cat driver/v2.ip.fix//Driver.UU.0[1-9] >driver/v2.ip.fix//Driver.o.UU
- X# Run uudecode to create "driver/v2.ip.fix//Driver.o":
- X uudecode driver/v2.ip.fix//Driver.o.UU
- END_OF_FILE
- if test 242 -ne `wc -c <'PACKNOTES'`; then
- echo shar: \"'PACKNOTES'\" unpacked with wrong size!
- fi
- # end of 'PACKNOTES'
- fi
- if test -f 'README' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'README'\"
- else
- echo shar: Extracting \"'README'\" \(3558 characters\)
- sed "s/^X//" >'README' <<'END_OF_FILE'
- X
- XSLIP (Serial Link Internet Protocol)
- X
- XTo build and install the slip driver, the slip utilities, and the slip login
- X(dialslip) utilities, type the following command:
- X
- X make
- X
- X
- XSLIP DRIVER
- X
- XIf you are using Unix System V Release 4.0.2 or below, you will need to copy
- Xv2.ip.fix/Driver.o to /etc/conf/pack.d/ip/Driver.o before you build the
- Xkernel. The ip driver of Unix System V R 4.0.2 has a bug for a point to point
- Xconnection which panics the system. The v2.ip.fix/Driver.o fixes the problem.
- XSLIP (Serial Link Internet Protocol)
- X
- XIf you need to configure the second serial port, because your first serial
- Xport is used by other device, refer to Intel's Unix System V.4.0 Administra-
- Xtors Guide.
- X
- XOnce the new ip driver and the slip have been installed, and your serial port
- Xhas been set up, you can build the kernel using the idbuild command. Don't
- Xforget to reboot your system after the idbuild command completes succesfully
- Xfor the new kernel to take into effect.
- X
- X
- XSLIP UTILITIES
- X
- Xslattach
- X
- XThe slattach command links the slip streams driver to the serial port and links
- Xthe ip driver to the slip driver.
- X
- XThe syntax of slattach is as following:
- X
- X slattach [-i] nodename interface_name
- XOR slattach -d [-i] devname interface_name [ baudrate ]
- XOR slattach - interface_name
- X
- XThe first option uses the Basic Networking Utilities (Advanced System
- XAdministration Volume 1 Chapter 7-15). Once the administration files
- Xare set up, you can use the remote node name to attach slip directly
- Xor through your modem. Example:
- X slattach venus sl0
- X
- XThe "-d" does not use BNU but directly open the next argument which is
- Xthe serial device and link it to the slip driver. The baudrate sets up
- Xthe line speed of the serial line; the default baudrate is 9600.
- X
- XTo start the slip interface using the first serial port at 1200 baud
- Xexecute the below command:
- X
- X slattach -d /dev/tty00 sl0 1200
- X
- XIf the slip hangup daemon (slhangupd) is run, slattach by default is set
- Xto receive hangup signal (SIGHUP) sent by the slip driver through slhangupd.
- XThe -i option ignores any hangup signal.
- X
- X
- Xifconfig
- X
- XThis utility is included in the standard base Unix System V Release 4.0
- Xproduct. Ifconfig is used to configure your system to the remote slip node.
- X
- X ifconfig interface_name source destination up
- X
- X
- Xslhangupd
- X
- XSlhangup (slip hangup daemon) is a daemon used to receive messages sent by
- Xthe slip driver. Whenever the slip driver receives a M_HANGUP message from
- Xa particular line, the driver sends sends the process id of the controlling
- Xslattach process to slhangupd. Slhangup then will send a SIGHUP (hangup
- Xsignal) to the pid received from the slip driver.
- X
- XThere is no restriction of the execution order of slattach and slhangupd.
- X
- X
- Xsldetach
- X
- Xsldetach removes the serial line that is being used for slip connection.
- X
- X sldetach interface_name
- X
- X
- XDIALSLIP (slip login utilities)
- X
- XTo install dialslip:
- X
- X1. Set up the /etc/slip.hosts file. This file maps login names to IP
- X addresses, which # comments, as usual.
- X
- X2. Set up the /etc/slip.config file. This file defines the IP address
- X of the local system on each interface. Set them all the same. There
- X can be as many simultaneous logins as lines in this file (not counting
- X comments).
- X
- X3. Run "mkslipuser". This builds a file similar in nature to utmp that
- X keeps track of who's logged in and what interface they're using.
- X This command should also be run at boot time to clean things up.
- X
- X4. Set up accounts for each system dialing in with "slip" as the shell
- X with its setuid bit set to root.
- X
- END_OF_FILE
- if test 3558 -ne `wc -c <'README'`; then
- echo shar: \"'README'\" unpacked with wrong size!
- fi
- # end of 'README'
- fi
- if test -f 'MANIFEST' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'MANIFEST'\"
- else
- echo shar: Extracting \"'MANIFEST'\" \(1363 characters\)
- sed "s/^X//" >'MANIFEST' <<'END_OF_FILE'
- X File Name Archive # Description
- X----------------------------------------------------------
- XPACKNOTES 1
- XREADME 1
- XMANIFEST 1
- XMakefile 4
- Xdialslip 1
- Xdialslip/Makefile 4
- Xdialslip/README.dialslip 4
- Xdialslip/dslipuser.c 4
- Xdialslip/mkslipuser.c 3
- Xdialslip/slip.c 3
- Xdialslip/slip.config 4
- Xdialslip/slip.h 3
- Xdialslip/slip.hosts 4
- Xdriver 1
- Xdriver/ID 1
- Xdriver/ID/Master 2
- Xdriver/ID/Node 4
- Xdriver/ID/Space.c 2
- Xdriver/ID/System 4
- Xdriver/io 1
- Xdriver/io/slip.c 1
- Xdriver/io/slip.mk 4
- Xdriver/sys 1
- Xdriver/sys/slip.h 4
- Xdriver/v2.ip.fix 1
- Xdriver/v2.ip.fix/Driver.UU.01 2
- Xdriver/v2.ip.fix/Driver.UU.02 1
- Xman 1
- Xman/man1 1
- Xman/man1/dslipuser.1 3
- Xman/man1/mkslipuser.1 3
- Xman/man1/slattach.1 3
- Xman/man1/sldetach.1 3
- Xman/man1/slhangupd.1 4
- Xman/man1/slip.1 3
- Xman/man7 1
- Xman/man7/slip.7 3
- Xutils 1
- Xutils/Makefile 4
- Xutils/slattach.c 3
- Xutils/sldetach 4
- Xutils/slhangupd.c 3
- END_OF_FILE
- if test 1363 -ne `wc -c <'MANIFEST'`; then
- echo shar: \"'MANIFEST'\" unpacked with wrong size!
- fi
- # end of 'MANIFEST'
- fi
- if test ! -d 'dialslip' ; then
- echo shar: Creating directory \"'dialslip'\"
- mkdir 'dialslip'
- fi
- if test ! -d 'driver' ; then
- echo shar: Creating directory \"'driver'\"
- mkdir 'driver'
- fi
- if test ! -d 'driver/ID' ; then
- echo shar: Creating directory \"'driver/ID'\"
- mkdir 'driver/ID'
- fi
- if test ! -d 'driver/io' ; then
- echo shar: Creating directory \"'driver/io'\"
- mkdir 'driver/io'
- fi
- if test -f 'driver/io/slip.c' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'driver/io/slip.c'\"
- else
- echo shar: Extracting \"'driver/io/slip.c'\" \(21755 characters\)
- sed "s/^X//" >'driver/io/slip.c' <<'END_OF_FILE'
- X/*
- X * Copyright 1991, Intel Corporation
- X * All rights reserved.
- X *
- X * Permission to use, copy, modify, and distribute this software and
- X * its documentation for any purpose and without fee is hereby granted,
- X * provided that the above copyright notice appear in all copies and
- X * that both the copyright notice appear in all copies and that both
- X * the copyright notice and this permission notice appear in
- X * supporting documentation, and that the name of Intel Corporation
- X * not be used in advertising or publicity pertaining to distribution
- X * of the software without specific, written prior premission.
- X *
- X * COMPANY AND/OR INTEL DISCLAIM ALL WARRANTIES WITH REGARD TO
- X * THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF
- X * MERCHANTIBILITY AND FITNESS FOR A PARTICULAR PURPOSE. IN NO
- X * EVENT SHALL COMPANY NOR INTEL BE LIABLE FOR ANY SPECIAL,
- X * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER
- X * RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
- X * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
- X * ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
- X * OF THIS SOFTWARE.
- X */
- X
- X/*
- X * Serial Line Internet Protocol (SLIP) streams multiplexor driver for
- X * Intel Unix System V/386 Release 4.0.
- X *
- X * The upper streams is supposed to be linked to the ip driver (/dev/ip)
- X * and optionally linked to the slip hangup daemon. The lower streams can
- X * linked to any number of serial driver.
- X *
- X * The slattach command builds the ip to slip to serial device links and
- X * The slhangupd command is a daemon for receiving M_HANGUP message from
- X * the serial driver.
- X *
- X * The packet framing protocol code, in the upper write and the lower
- X * read service routine (slip_uwsrv and slip_lrsrv) is based from
- X * tty_slip.c written by Rayan Zachariassen <rayan@ai.toronto.edu> and
- X * Doug Kingston <dpk@morgan.com>.
- X *
- X * Author:
- X * Sudji Husodo <sudji@indo.intel.com> 1/9/91
- X */
- X
- X#include <sys/types.h>
- X#include <sys/kmem.h>
- X#include <sys/stream.h>
- X#include <sys/stropts.h>
- X#include <sys/dlpi.h>
- X#include <sys/syslog.h>
- X#include <sys/strlog.h>
- X#include <sys/socket.h>
- X#include <sys/sockio.h>
- X#include <sys/log.h>
- X#include <sys/errno.h>
- X#include <sys/ioctl.h>
- X#include <sys/param.h>
- X#include <sys/ddi.h>
- X
- X#include <net/if.h>
- X#include <netinet/in.h>
- X#include <netinet/in_systm.h>
- X#include <netinet/ip.h>
- X#include <sys/slip.h>
- X
- X#define DL_PRIM_SIZE sizeof (union DL_primitives)
- X
- Xint slip_devflag = 0; /* V4.0 style driver */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xint slip_open(), slip_close(), slip_uwput(), slip_uwsrv(),
- X slip_lwput(), slip_lwsrv(), slip_lrput(), slip_lrsrv();
- X
- Xstatic struct module_info minfo[5] = {
- X SLIPM_ID, "slip", 0, 8192, 16384, 4096,
- X SLIPM_ID, "slip", 0, 8192, 16384, 4096,
- X SLIPM_ID, "slip", 0, 8192, 16384, 4096,
- X SLIPM_ID, "slip", 0, 8192, 16384, 4096,
- X SLIPM_ID, "slip", 0, 8192, 16384, 4096,
- X};
- X
- Xstatic struct qinit urinit = {
- X NULL, NULL, slip_open, slip_close, NULL, &minfo[0], NULL };
- X
- Xstatic struct qinit uwinit = {
- X slip_uwput, slip_uwsrv, slip_open, slip_close, NULL, &minfo[1], NULL };
- X
- Xstatic struct qinit lrinit = {
- X slip_lrput, slip_lrsrv, slip_open, slip_close, NULL, &minfo[3], NULL };
- X
- Xstatic struct qinit lwinit = {
- X slip_lwput, slip_lwsrv, slip_open, slip_close, NULL, &minfo[4], NULL };
- X
- Xstruct streamtab slip_info = {
- X &urinit, &uwinit, &lrinit, &lwinit };
- X
- Xslip_t *slip_hup = (slip_t *) 0;
- X
- Xextern struct ifstats *ifstats;
- Xextern u_int slip_num;
- Xextern slip_t slip_data[];
- X
- X/*
- X * slip_open
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_open (q, devp, flag, sflag, credp)
- Xqueue_t *q;
- Xdev_t *devp;
- Xint flag;
- Xint sflag;
- Xstruct cred *credp;
- X{
- X register slip_t *p_slip;
- X dev_t dev;
- X int oldpri;
- X mblk_t *bp;
- X major_t major = getmajor (*devp);
- X minor_t minor = getminor (*devp);
- X
- X STRLOG (SLIPM_ID,0,0,SL_TRACE,"slip_open: major %d minor %d",major,minor);
- X
- X /* find an unused entry in slip_data */
- X
- X if (sflag == CLONEOPEN) {
- X for (dev=0, p_slip=&slip_data[0]; dev<slip_num; dev++, p_slip++)
- X if (!p_slip->buf)
- X break;
- X minor = (minor_t) dev;
- X }
- X
- X /* if there's no more free entry, return No Space error code */
- X
- X if (minor >= slip_num) {
- X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip open: can't allocate device");
- X return ENXIO;
- X }
- X
- X /* initialized slip information */
- X
- X oldpri = splstr ();
- X p_slip->state = DL_UNBOUND;
- X p_slip->qtop = q;
- X p_slip->qbot = NULL;
- X p_slip->buf = (u_char *) kmem_alloc (SLIPMTU, KM_SLEEP);
- X p_slip->qt_blocked = 0;
- X drv_getparm (PPID, &p_slip->pid); /* keep process id */
- X
- X p_slip->escape = p_slip->overrun = p_slip->inlen = 0;
- X p_slip->flags = IFF_UP | IFF_POINTOPOINT;
- X p_slip->uname[0] = '\0';
- X
- X /* initialized interface and its statistics */
- X
- X p_slip->stats.ifs_name = (char *) p_slip->uname;
- X p_slip->stats.ifs_unit = 0;
- X p_slip->stats.ifs_active = 0;
- X p_slip->stats.ifs_mtu = SLIPMTU;
- X p_slip->stats.ifs_ipackets = p_slip->stats.ifs_opackets = 0;
- X p_slip->stats.ifs_ierrors = p_slip->stats.ifs_oerrors = 0;
- X p_slip->stats.ifs_collisions = 0;
- X splx (oldpri);
- X
- X /* initialize read and write queue pointers to private data */
- X
- X q->q_ptr = (caddr_t) p_slip;
- X WR(q)->q_ptr = (caddr_t) p_slip;
- X
- X /* set up the correct stream head flow control parameters */
- X
- X if (bp = allocb (sizeof (struct stroptions), BPRI_MED)) {
- X struct stroptions *sop = (struct stroptions *) bp->b_rptr;
- X bp->b_datap->db_type = M_SETOPTS;
- X bp->b_wptr += sizeof (struct stroptions);
- X sop->so_flags = SO_HIWAT | SO_LOWAT;
- X sop->so_hiwat = minfo [2].mi_hiwat;
- X sop->so_lowat = minfo [2].mi_lowat;
- X putnext (q, bp);
- X }
- X *devp = makedevice (major, minor);
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip open: device %d coming up", minor);
- X return (0);
- X}
- X
- X/*
- X * slip_close ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_close (q)
- Xqueue_t *q;
- X{
- X slip_t *p_slip;
- X dev_t dev;
- X int oldpri;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_close: going down ...");
- X p_slip = (slip_t *) q->q_ptr;
- X oldpri = splstr ();
- X
- X if (p_slip->buf)
- X kmem_free (p_slip->buf, SLIPMTU);
- X
- X p_slip->state = DL_UNATTACHED;
- X p_slip->buf = 0;
- X p_slip->inlen = 0;
- X p_slip->qtop = 0;
- X p_slip->pid = 0;
- X
- X ifstats = p_slip->stats.ifs_next; /* reset ifstats pointers */
- X splx (oldpri);
- X}
- X
- X/*
- X * slip_ioctl ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_ioctl (q, mp)
- Xqueue_t *q;
- Xmblk_t *mp;
- X{
- X struct iocblk *iocp;
- X struct ifreq *ifr;
- X slip_t *p_slip;
- X int oldpri;
- X struct linkblk *lp;
- X slip_t *pp;
- X u_char *p;
- X int n;
- X
- X p_slip = (slip_t *) q->q_ptr;
- X iocp = (struct iocblk *) mp->b_rptr;
- X
- X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_ioctl: enter: case ('%c',%d)", 0x00FF&(iocp->ioc_cmd>>8), 0x00FF&iocp->ioc_cmd);
- X oldpri = splstr ();
- X
- X switch (iocp->ioc_cmd) {
- X
- X case REG_SLHUP:
- X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_ioctl: REG_SLHUP");
- X if (slip_hup) {
- X splx (oldpri);
- X mp->b_datap->db_type = M_IOCNAK;
- X qreply (q, mp);
- X return (0);
- X }
- X else
- X slip_hup = p_slip;
- X break;
- X
- X case UNREG_SLHUP:
- X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_ioctl: UNREG_SLHUP");
- X slip_hup = 0;
- X break;
- X
- X case I_LINK:
- X iocp->ioc_error = iocp->ioc_rval = iocp->ioc_count = 0;
- X
- X lp = (struct linkblk *) mp->b_cont->b_rptr;
- X p_slip->qbot = lp->l_qbot;
- X p_slip->qbot->q_ptr = (char *) p_slip;
- X OTHERQ (p_slip->qbot)->q_ptr = (char *) p_slip;
- X break;
- X
- X case I_UNLINK:
- X iocp->ioc_error = iocp->ioc_rval = iocp->ioc_count = 0;
- X p_slip->qbot = NULL;
- X break;
- X
- X case SIOCSIFNAME:
- X ifr = (struct ifreq *) mp->b_cont->b_rptr;
- X
- X /* copy interface name to local slip structure */
- X
- X /*
- X * interface name (ifr->ifr_name) contains the name and unit, e.g.
- X * "sl0", "sl12", "emd0", "wd1", etc. Store the name in slip->uname
- X * and unit in slip->unit. If unit is not supplied, e.g. "slip",
- X * then unit number is assumed to be zero.
- X */
- X
- X strncpy (p_slip->uname, ifr->ifr_name, IFNAMSIZ); /* copy name */
- X n = 0;
- X
- X /* starting from the last char, find the first non-digit char */
- X
- X p = p_slip->uname + strlen(p_slip->uname) - 1;
- X while ('0' <= *p && *p <= '9')
- X p--;
- X
- X /* calculate integer, replace them with nulls */
- X
- X while (*++p) {
- X n = 10*n + (*p-'0');
- X *p = '\0';
- X }
- X p_slip->stats.ifs_unit = n; /* set ifs unit number */
- X
- X /* search for matching interface name and unit */
- X
- X for (n=0, pp=&slip_data[0]; n<slip_num; n++, pp++)
- X if (pp != p_slip && pp->buf && !strcmp (pp->uname,p_slip->uname) &&
- X pp->stats.ifs_unit == p_slip->stats.ifs_unit)
- X break;
- X
- X if (n < slip_num) { /* found matching ifname */
- X splx (oldpri);
- X mp->b_datap->db_type = M_IOCNAK; /* Negative Ack reply */
- X qreply (q, mp);
- X return (0);
- X }
- X else { /* ifname is unique */
- X p_slip->stats.ifs_next = ifstats; /* set ifstats pointers */
- X ifstats = &p_slip->stats; /* used for statistics */
- X } /* by netstat command */
- X break;
- X
- X case SIOCGIFFLAGS:
- X ((struct iocblk_in *)iocp)->ioc_ifflags = p_slip->flags;
- X break;
- X
- X case SIOCSIFFLAGS:
- X p_slip->flags = ((struct iocblk_in *)iocp)->ioc_ifflags;
- X break;
- X
- X case SIOCSIFADDR:
- X p_slip->flags |= IFF_RUNNING;
- X ((struct iocblk_in *)iocp)->ioc_ifflags |= IFF_RUNNING;
- X break;
- X
- X default:
- X break;
- X }
- X splx (oldpri);
- X mp->b_datap->db_type = M_IOCACK;
- X qreply (q, mp);
- X}
- X
- X/*
- X * slip_uwput ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_uwput (q, mp)
- Xqueue_t *q;
- Xmblk_t *mp;
- X{
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_uwput: case 0x%2.2x", mp->b_datap->db_type);
- X
- X switch (mp->b_datap->db_type) {
- X
- X case M_FLUSH:
- X if (*mp->b_rptr & FLUSHW) {
- X flushq(q, FLUSHALL);
- X *mp->b_rptr &= ~FLUSHW;
- X }
- X if (*mp->b_rptr & FLUSHR)
- X qreply(q, mp);
- X else
- X freemsg(mp);
- X break;
- X
- X case M_IOCTL:
- X slip_ioctl (q, mp);
- X break;
- X
- X case M_PROTO:
- X case M_PCPROTO:
- X slip_dl_cmds (q, mp);
- X break;
- X
- X default:
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwput: unknown message type, passing message to the next queue");
- X putnext (((slip_t *)q->q_ptr)->qbot, mp);
- X break;
- X }
- X}
- X
- X/*
- X * slip_uwsrv ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_uwsrv (q)
- Xregister queue_t *q;
- X{
- X register mblk_t *mp, *mpd, *mp2;
- X register u_char *cp;
- X register int pktlen, num;
- X register slip_t *p_slip;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_uwsrv: enter");
- X
- X while ((mp = getq(q)) != NULL) {
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwsrv: got message from q");
- X p_slip = (slip_t *) q->q_ptr;
- X
- X
- X if (!canput (p_slip->qbot)) {
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwsrv: can't put message to qbot");
- X putbq (q, mp);
- X p_slip->qt_blocked = 1;
- X return;
- X }
- X pktlen = 0;
- X
- X /*
- X * count the number of special characters (END & ESC)
- X */
- X
- X num = 2; /* END char is put at the start and end of packet */
- X
- X for (mpd = mp->b_cont; mpd != 0; mpd = mpd->b_cont) {
- X pktlen += (mpd->b_wptr - mpd->b_rptr);
- X
- X for (cp = mpd->b_rptr; cp < mpd->b_wptr; cp++) {
- X if (*cp == END || *cp == ESC)
- X num++;
- X }
- X }
- X STRLOG (SLIPM_ID, 1, 0, SL_TRACE, "slip_uwsrv: # of bytes in packet = %d; # of special character in packet: %d", pktlen, num);
- X
- X /*
- X * allocate message block to be sent down stream
- X */
- X
- X if ((mp2 = allocb (pktlen + num, BPRI_MED)) == NULL) {
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_uwsrv: can't allocate message block - dropping outgoing message");
- X p_slip->stats.ifs_oerrors++;
- X freemsg (mp);
- X return;
- X }
- X /*
- X * frame packet, escape special characters ESC and END
- X */
- X
- X *mp2->b_wptr++ = END;
- X
- X for (mpd = mp->b_cont; mpd != 0; mpd = mpd->b_cont) {
- X for (cp = mpd->b_rptr; cp < mpd->b_wptr; cp++) {
- X if (*cp == END) {
- X *mp2->b_wptr++ = ESC;
- X *mp2->b_wptr++ = ESC_END;
- X }
- X else if (*cp == ESC) {
- X *mp2->b_wptr++ = ESC;
- X *mp2->b_wptr++ = ESC_ESC;
- X }
- X else
- X *mp2->b_wptr++ = *cp;
- X }
- X }
- X *mp2->b_wptr++ = END;
- X
- X mp2->b_datap->db_type = M_DATA;
- X p_slip->stats.ifs_opackets++;
- X freemsg (mp);
- X slip_lwput (p_slip->qbot, mp2);
- X }
- X}
- X
- X/*
- X * slip_lwput
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_lwput (q, mp)
- Xqueue_t *q;
- Xmblk_t *mp;
- X{
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lwput: enter %x, %x",q , mp);
- X
- X if (canput(q->q_next)) {
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lwput: putnext");
- X putnext(q, mp);
- X }
- X else {
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lwput: putq");
- X putq(q, mp);
- X }
- X}
- X
- X/*
- X * slip_lwsrv (q)
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_lwsrv (q)
- Xqueue_t *q;
- X{
- X mblk_t *mp;
- X slip_t *p_slip;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: enter");
- X
- X while (mp = getq(q)) {
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: getq (%x) = %x",q, mp);
- X if (canput(q->q_next)) {
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: putnext");
- X putnext(q, mp);
- X }
- X else {
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE,"slip_lwsrv: putbq");
- X putbq(q, mp);
- X return;
- X }
- X }
- X p_slip = (slip_t *) q->q_ptr;
- X
- X if (p_slip->qt_blocked) {
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_lwsrv: slip_uwsrv is blocked, enable it");
- X /*
- X * qtop is the upper read q and
- X * we want to enable the upper write q
- X */
- X qenable (WR(p_slip->qtop));
- X p_slip->qt_blocked = 0;
- X }
- X}
- X
- X/*
- X * slip_lrput ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_lrput (q, mp)
- Xqueue_t *q;
- Xmblk_t *mp;
- X{
- X slip_t *p_slip;
- X mblk_t *resp;
- X int device;
- X int oldpri;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lrput: enter: case 0x%2.2x", mp->b_datap->db_type);
- X p_slip = (slip_t *) q->q_ptr;
- X
- X switch (mp->b_datap->db_type) {
- X
- X case M_DATA:
- X STRLOG (SLIPM_ID,2,0,SL_TRACE,"slip_lrput: putq (%x, %x)", q, mp);
- X putq (q, mp);
- X break;
- X
- X case M_FLUSH:
- X STRLOG (SLIPM_ID,2,0,SL_TRACE,"slip_lrput: M_FLUSH type = %x",*mp->b_rptr);
- X if (*mp->b_rptr & FLUSHR)
- X flushq(q, FLUSHALL);
- X if (*mp->b_rptr & FLUSHW) {
- X *mp->b_rptr &= ~FLUSHR;
- X flushq(WR(q), FLUSHALL);
- X qreply(q, mp);
- X } else
- X freemsg(mp);
- X return;
- X
- X case M_HANGUP:
- X oldpri = splstr ();
- X /*
- X * if pid is set, ignore message
- X */
- X if (p_slip->pid == 0)
- X freemsg (mp);
- X /*
- X * else if slip hangup daemon exists send pid to the daemon
- X */
- X else if (slip_hup && (resp = allocb (sizeof(pid_t),BPRI_MED))) {
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,
- X "slip_lrput: sending pid %d to hangup daemon", p_slip->pid);
- X *(pid_t *) resp->b_wptr = p_slip->pid;
- X resp->b_wptr += sizeof (pid_t);
- X resp->b_datap->db_type = M_PCPROTO;
- X putnext (slip_hup->qtop, resp);
- X freemsg (mp);
- X }
- X /*
- X * else pass the message upstream
- X */
- X else
- X putnext (p_slip->qtop, mp);
- X
- X splx (oldpri);
- X break;
- X
- X default:
- X putnext (p_slip->qtop, mp);
- X break;
- X }
- X}
- X
- X/*
- X * slip_lrsrv ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_lrsrv (q)
- Xqueue_t *q;
- X{
- X register u_char *cp;
- X register slip_t *p_slip;
- X mblk_t *bp, *mp, *mp1, *mp2;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lrsrv: enter");
- X
- X while ((mp = getq(q)) != NULL) {
- X p_slip = (slip_t *) q->q_ptr;
- X
- XSTRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_lrsrv: q=%x, mp=%x;", q, mp);
- X if (!canput (p_slip->qtop->q_next)) {
- X putbq (q, mp);
- X return;
- X }
- X p_slip = (slip_t *) q->q_ptr;
- X
- X for (bp = mp; bp != 0; bp = bp->b_cont) {
- X for (cp = bp->b_rptr; cp < bp->b_wptr; cp++) {
- X if (*cp == END) {
- X if (p_slip->inlen < sizeof (struct ip))
- X ; /* ignore packet */
- X
- X else if (p_slip->overrun)
- X p_slip->stats.ifs_ierrors++;
- X
- X else if ((mp1=allocb (DL_UNITDATA_IND_SIZE,BPRI_MED))==NULL)
- X p_slip->stats.ifs_ierrors++;
- X
- X else if ((mp2 = allocb (p_slip->inlen, BPRI_MED)) == NULL) {
- X p_slip->stats.ifs_ierrors++;
- X freemsg (mp1);
- X }
- X else {
- X p_slip->stats.ifs_ipackets++; /* send unit data */
- X linkb (mp1, mp2); /* indication up */
- X slip_dl_unitdata_ind (q, mp1); /* stream */
- X putnext (p_slip->qtop, mp1);
- X }
- X p_slip->inlen = 0; /* reset info for */
- X p_slip->overrun = 0; /* receiving data */
- X p_slip->escape = 0;
- X }
- X else if (p_slip->inlen >= SLIPMTU)
- X p_slip->overrun = 1;
- X
- X else if (*cp == ESC) /* if data is ESC */
- X p_slip->escape = 1;
- X
- X else if (p_slip->escape) {
- X p_slip->escape = 0;
- X
- X if (*cp == ESC_END)
- X *(p_slip->buf + p_slip->inlen++) = END;
- X else if (*cp == ESC_ESC)
- X *(p_slip->buf + p_slip->inlen++) = ESC;
- X else
- X *(p_slip->buf + p_slip->inlen++) = *cp;
- X }
- X else
- X *(p_slip->buf + p_slip->inlen++) = *cp;
- X }
- X bp->b_rptr = cp;
- X }
- X freemsg (mp);
- X }
- X}
- X
- X/*
- X * slip_dl_cmds ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_dl_cmds (q, mp)
- Xqueue_t *q;
- Xmblk_t *mp;
- X{
- X union DL_primitives *p_dl;
- X mblk_t *response;
- X slip_t *p_slip;
- X int oldpri;
- X
- X if ((response = allocb (DL_PRIM_SIZE, BPRI_MED)) == NULL) {
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: can't allocate response buffer");
- X freemsg (mp);
- X return;
- X }
- X
- X p_slip = (slip_t *) q->q_ptr;
- X p_dl = (union DL_primitives *) mp->b_datap->db_base;
- X
- X switch (p_dl->dl_primitive) {
- X
- X case DL_INFO_REQ:
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_INFO_REQ");
- X slip_dl_info_ack (q, mp, response);
- X break;
- X
- X case DL_BIND_REQ:
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_BIND_REQ");
- X if (p_slip->state == DL_UNBOUND) {
- X oldpri = splstr ();
- X p_slip->sap = ((dl_bind_req_t *)p_dl)->dl_sap;
- X p_slip->state = DL_IDLE;
- X p_slip->stats.ifs_active = 1;
- X splx (oldpri);
- X
- X slip_dl_bind_ack (q, mp, response);
- X }
- X else
- X slip_dl_error_ack (q, mp, response, DL_OUTSTATE);
- X break;
- X
- X case DL_UNBIND_REQ:
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_UNBIND_REQ");
- X if (p_slip->state == DL_IDLE) {
- X oldpri = splstr ();
- X p_slip->state = DL_UNBOUND;
- X p_slip->stats.ifs_active = 0;
- X splx (oldpri);
- X
- X flushq (q, FLUSHDATA); /* Flush both q's */
- X flushq (RD(q), FLUSHDATA);
- X
- X slip_dl_ok_ack (q, mp, response);
- X }
- X else
- X slip_dl_error_ack (q, mp, response, DL_OUTSTATE);
- X
- X break;
- X
- X case DL_UNITDATA_REQ:
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: DL_UNITDATA_REQ");
- X if (p_slip->state == DL_IDLE) {
- X STRLOG (SLIPM_ID,2,0,SL_TRACE,"slip_dl_cmd: putq (%x, %x)", q, mp);
- X putq (q, mp);
- X return;
- X }
- X else
- X slip_dl_error_ack (q, mp, response, DL_OUTSTATE);
- X
- X break;
- X
- X default:
- X STRLOG (SLIPM_ID,1,0,SL_TRACE,"slip_dl_cmd: default 0x%2.2x",p_dl->dl_primitive);
- X slip_dl_error_ack (q, mp, response, DL_UNSUPPORTED);
- X break;
- X }
- X freemsg (mp);
- X putnext (RD(q), response);
- X}
- X
- X/*
- X * slip_dl_info_ack ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_dl_info_ack (q, mp, response)
- Xqueue_t *q;
- Xmblk_t *mp;
- Xmblk_t *response;
- X{
- X dl_info_ack_t *p_info_ack;
- X slip_t *p_slip;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_info_ack: enter");
- X
- X p_slip = (slip_t *) q->q_ptr;
- X
- X p_info_ack = (dl_info_ack_t *) response->b_wptr;
- X p_info_ack->dl_primitive = DL_INFO_ACK;
- X p_info_ack->dl_max_sdu = SLIPMTU;
- X
- X p_info_ack->dl_min_sdu = 46; /* ????? */
- X p_info_ack->dl_addr_length = 0; /* ????? MAC_ADD_SIZE*/
- X p_info_ack->dl_mac_type = DL_CHAR; /* ????? */
- X
- X p_info_ack->dl_current_state = p_slip->state;
- X p_info_ack->dl_service_mode = DL_CLDLS; /* connecionless DL */
- X
- X p_info_ack->dl_qos_length = 0; /* ???? */
- X p_info_ack->dl_qos_offset = 0; /* ???? */
- X p_info_ack->dl_qos_range_length = 0; /* ???? */
- X p_info_ack->dl_qos_range_offset = 0; /* ???? */
- X
- X p_info_ack->dl_provider_style = DL_STYLE1;
- X
- X p_info_ack->dl_addr_offset = 0; /* ???? */
- X p_info_ack->dl_growth = 0;
- X
- X response->b_datap->db_type = M_PCPROTO;
- X response->b_wptr += DL_INFO_ACK_SIZE;
- X}
- X
- X/*
- X * slip_dl_bind_ack ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_dl_bind_ack (q, mp, response)
- Xqueue_t *q;
- Xmblk_t *mp;
- Xmblk_t *response;
- X{
- X dl_bind_req_t *p_dl;
- X dl_bind_ack_t *p_bind;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_bind_ack: enter");
- X
- X p_dl = (dl_bind_req_t *) mp->b_datap->db_base;
- X
- X p_bind = (dl_bind_ack_t *) response->b_wptr;
- X p_bind->dl_primitive = DL_BIND_ACK;
- X p_bind->dl_sap = p_dl->dl_sap;
- X p_bind->dl_addr_length = 0;
- X p_bind->dl_addr_offset = 0;
- X
- X response->b_wptr += DL_BIND_ACK_SIZE;
- X response->b_datap->db_type = M_PCPROTO;
- X}
- X
- X/*
- X * slip_dl_ok_ack ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_dl_ok_ack (q, mp, response)
- Xqueue_t *q;
- Xmblk_t *mp;
- Xmblk_t *response;
- X{
- X union DL_primitives *p_dl;
- X dl_ok_ack_t *p_ok_ack;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_ok_ack: enter");
- X
- X p_dl = (union DL_primitives *) mp->b_datap->db_base;
- X
- X p_ok_ack = (dl_ok_ack_t *)(response->b_wptr);
- X p_ok_ack->dl_primitive = DL_OK_ACK;
- X p_ok_ack->dl_correct_primitive = p_dl->dl_primitive;
- X
- X response->b_wptr += DL_OK_ACK_SIZE;
- X response->b_datap->db_type = M_PCPROTO;
- X}
- X
- X/*
- X * slip_dl_error_ack
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_dl_error_ack (q, mp, response, dl_errno)
- Xqueue_t *q;
- Xmblk_t *mp;
- Xmblk_t *response;
- Xulong dl_errno;
- X{
- X union DL_primitives *p_dl;
- X dl_error_ack_t *p_error;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_error_ack: enter");
- X
- X p_dl = (union DL_primitives *) mp->b_datap->db_base;
- X
- X p_error = (dl_error_ack_t *) response->b_wptr;
- X p_error->dl_primitive = DL_ERROR_ACK;
- X p_error->dl_error_primitive = p_dl->dl_primitive;
- X p_error->dl_errno = dl_errno;
- X p_error->dl_unix_errno = 0;
- X
- X response->b_wptr += DL_ERROR_ACK_SIZE;
- X response->b_datap->db_type = M_PCPROTO;
- X}
- X
- X/*
- X * slip_dl_unitdata_ind ()
- X */
- X
- X#ifndef DEBUG
- Xstatic
- X#endif
- Xslip_dl_unitdata_ind (q, mp)
- Xqueue_t *q;
- Xmblk_t *mp;
- X{
- X dl_unitdata_ind_t *p_dl;
- X slip_t *p_slip;
- X
- X STRLOG (SLIPM_ID, 0, 0, SL_TRACE, "slip_dl_unitdata_ind: enter");
- X
- X p_dl = (dl_unitdata_ind_t *) mp->b_wptr;
- X p_dl->dl_primitive = DL_UNITDATA_IND;
- X p_dl->dl_dest_addr_length = 0;
- X p_dl->dl_dest_addr_offset = DL_UNITDATA_IND_SIZE;
- X p_dl->dl_src_addr_length = 0;
- X p_dl->dl_src_addr_offset = p_dl->dl_dest_addr_offset + p_dl->dl_dest_addr_length;
- X
- X mp->b_wptr += DL_UNITDATA_IND_SIZE;
- X mp->b_datap->db_type = M_PROTO;
- X
- X /* copy packet received to the next message block */
- X
- X p_slip = (slip_t *) q->q_ptr;
- X
- X bcopy ((caddr_t)p_slip->buf, (caddr_t)mp->b_cont->b_wptr, p_slip->inlen);
- X
- X mp->b_cont->b_wptr += p_slip->inlen;
- X}
- END_OF_FILE
- if test 21755 -ne `wc -c <'driver/io/slip.c'`; then
- echo shar: \"'driver/io/slip.c'\" unpacked with wrong size!
- fi
- # end of 'driver/io/slip.c'
- fi
- if test ! -d 'driver/sys' ; then
- echo shar: Creating directory \"'driver/sys'\"
- mkdir 'driver/sys'
- fi
- if test ! -d 'driver/v2.ip.fix' ; then
- echo shar: Creating directory \"'driver/v2.ip.fix'\"
- mkdir 'driver/v2.ip.fix'
- fi
- if test -f 'driver/v2.ip.fix/Driver.UU.02' -a "${1}" != "-c" ; then
- echo shar: Will not clobber existing file \"'driver/v2.ip.fix/Driver.UU.02'\"
- else
- echo shar: Extracting \"'driver/v2.ip.fix/Driver.UU.02'\" \(20206 characters\)
- sed "s/^X//" >'driver/v2.ip.fix/Driver.UU.02' <<'END_OF_FILE'
- XM[B\```)A``#^+P```:````HP```!!0``#S````+&``!D,````J@``&\P```!
- XMH```=S````$%``!\,````L8``(4P```"M```CC````&@``"6,````04``)LP
- XM```"Q@``MS````)````",0```5,``$PQ```!TP``SC$```+$``#B,0```5,`
- XM`.<Q```!4P``[C$```%3``#W,0```5,``(0R```"P```GC(```'3``"F,@``
- XM`K0``.,R```"P````#,```*T``"/,P```DL``/8S```"X0``&S0```*T``!'
- XM-````N$``($T```"8```AS0```%3``"4-````3```)DT```"<P``H30```%V
- XM``"Y-````=,``,@T```!4P``TS0```%3``#>-````=,``.PT```!4P``O34`
- XM``)'```F-@```KX``$$V```"+P``2#8```+?``"+-@```KX``-DV```"O@``
- XM'#<```*^``#2-P```KX``.0W```"1P``'3@```*^```I.````JT``$`X```"
- XMO@``7S@```)J``!J.````K0``)\X```!O0``IC@```&]``#*.````HL``.TX
- XM```!O0``\C@```)(```1.0```HL``%,Y```"BP``BSD```%#``"4.0```04`
- XM`)DY```"Q@``ICD```$8``"L.0```KX``+HY```!3P``OSD```%/``#%.0``
- XM`4\``,PY```!&```X#D```%/``#J.0```4\``/XY```"80``%3H```%/```D
- XM.@```4\``"LZ```!&```.#H```$8``!*.@```1@``$\Z```"O@``;CH```$8
- XM``#(.@```KX```,[```"O@``/CL```*^``"\.P```4,``.T[```!!0``\CL`
- XM``+&```,/````<<``!4\```!I0``'CP```&@```F/````04``"L\```"Q@``
- XM,CP```'3```Z/````K0``%$\```"P0``7#P```&@``!D/````04``&D\```"
- XMQ@``<CP```*T``"C/````E@``*X\```!O0``M#P```&]``#+/````;T``-,\
- XM```!O0``XSP```&]``#H/````HL``/$\```!O0``_CP```&]```1/0```;T`
- XM`!8]```"2```*#T```&]```X/0```;T``#T]```"BP``13T```&]``!2/0``
- XM`;T``&(]```!O0``;CT```&]``!_/0```;T``)L]```!O0``KCT```'4```#
- XM/@```;T``!8^```!O0``.SX```&]``!./@```;T``&T^```!:```G3X```%]
- XM``"E/@```4,``+H^```!!0``OSX```+&``#+/@```F$``-T^```"M```[#X`
- XM``*T```Q/P```;T``&P_```!LP``>C\```&)``""/P```8D``(P_```"M```
- XMFS\```*T``"N/P```;T``+8_```!O0``QS\```&S``#0/P```N```.$_```!
- XMO0``\3\```&]``#V/P```HL```%````!O0``#D````&]```>0````=,``#!`
- XM```!TP``J$````)J``"]0````K0``-)````"M```V4````'3``#]0````J<`
- XM`&A!```"0```@D$```)A``#!00```KX``-%!```"O```6D(```%Q``!A0@``
- XM`7$``+%"```"6@``O4(```%H```L0P```HL``'!#```";0``BT,```(O``"2
- XM0P```M\``,-#```"2```YD,```*+```,1````>```!%$```"7P``1$0```*G
- XM``"E1````J@``+E$```":@``YD0```)0``"R10```E4``,M%```"J```Z$4`
- XM``*V```\1@```H(``&)&```"80``7T<```)5``"G1P```IP``+5'```"M```
- XMV$<```*H``#U1P```K8``$1(```"M```;4@```*+``"?2````7T``*E(```!
- XM?0``ZT@```*H```)20```K8``"1)```"J```/4D```)```!/20```FL``*9)
- XM```"80``Q4D```*^``#<20```KX``/I)```"C```EDH```*^```22P```04`
- XM`!E+```"N```34L```)9``!<2P```K0``)]+```!!0``IDL```*X```'3```
- XM`F$``"Q,```!(```-$P```+:```Z3````2```$1,```!70``4DP```%=``!P
- XM3````;,``'Y,```!B0``BDP```&)``"33````C8``*E,```"S```Q4P```)A
- XM``#53````;,```%-```"C```"4T```(V```T30```1L``#U-```!&P``:$T`
- XM``$%``!O30```K@``)%-```"8P```TX```)C```L3@```KP``&).```!`P``
- XMB$X```*\``#,3@```6\``-).```!;P``\4X```*\```%3P```K8``"A/```"
- XMM```.$\```*T``!(3P```;,``%=/```!LP``>4\```*\``"'3P```8D``+5/
- XM```"O```W$\```&S``#M3P```6\``!10```"O```)%````&S```S4````6\`
- XM`#Q0```!B0``0E````%O``!;4````6\``&%0```!B0``:U````&S``!Y4```
- XM`6\``)=0```!?0``W5````*\``#X4````BH``"U1```"O```F%$```%H``#;
- XM40```1L``.-1```"-P``&U(```*\```O4@```IT``$%2```!:```35(```%H
- XM``!74@```7```%]2```!<```@E(```%H``"(4@```K4``+A2```"80``#U,`
- XM``*\``!34P```KP``&53```"80``CE,```*\```T5````KP``(Y4```!:```
- XMGU0```*^``#-5````7T```I5```"O```'E4```%=```G50```7T``"M5```!
- XM:```,%4```&S```Y50```6@``$15```"-@``3E4```%P``!550```6@``%I5
- XM```"M0``8E4```'"``!M50```7$``'E5```!B0``?U4```%O``"-50```I\`
- XM`))5```",```F%4```%=``"A50```G0```Y6```!!0``%58```*X```>5@``
- XM`K0``"M6```">P``4%8```$#``!H5@```K0``(U6```"O```GU8```*V``"]
- XM5@```F,``-Y6```"8P``Z%8```*\``#V5@```K0```)7```"M```,E<```%O
- XM```X5P```8D``$17```!;P``2U<```&S``!65P```J@``'Q7```!LP``B5<`
- XM``)8``"85P```;,``*)7```!LP``LU<```&)``"[5P```K0``,I7```!W```
- XMTE<```'<``"06````K0``,98```"O````%D```*T``!"60```KP``'99```"
- XM80``A5D```*,``"D60```KX``,A9```"C```Z%D```)A``#W60```3H```5:
- XM```"FP``6%H```*U``"I6@```4X``.E:```!!```05L```*Q``!*6P```F$`
- XM`(5;```"M0``G5L```*^``#Z6P```F$``"%<```"80``AUP```*T```F70``
- XM`K0``#I=```"@@``2%T```*\``#;7@```I0``.5>```!>@``\EX```%<```0
- XM7P```58``!E?```!<@``(U\```%R``!+7P```:(``'%?```!!0``=E\```+&
- XM``#)7P```7(``-5?```!H@``ZU\```(U```O8````04``#1@```";```4V``
- XM``(N``!I8````5X``'%@```"C```DV````(_``"?8````:(``.!@```"1P``
- XM[&````&B```180```7(``!]A```">@``:&$```&B``"_80```:(``-EA```!
- XMH@``XV$```&B``!.8@```I0``&YB```!7```@F(```%6``#)8@```GH``$-C
- XM```!I0``8&,```%>``!V8P```HP``*1C```!)P``K6,```&E``#:8P```FT`
- XM``!D```"1P``&V0```(_```]9````F$``.ID```"80```F4```*U```O90``
- XM`HP``$UE```!7```I64```%6``"]90```;\``,)E```!!0``R64```*X``#1
- XM90```04``-AE```"N```X&4```$%``#G90```K@``.]E```!!0``]F4```*X
- XM``#^90```04```5F```"N`````````$"```$`````0(```@````!`@``#```
- XM``$"```0`````0(``!0````!`@``&`````$"```<`````0(``"`````!`@``
- XM)`````$"```H`````0(``"P````!`@``,`````$"```T`````0(``#@````!
- XM`@``&`````$3```D`````1(``#`````!$@``/`````$2``!(`````1(``%0`
- XM```!$@``8`````$2``!L`````1(``'@````!$@``$`$```$%```H`0```04`
- XM`$`!```!!0``6`$```$%``!P`0```04``(P!```!D@``D`$```&(``"8`0``
- XM`1L``*`!```!E0``I`$```%2``"H`0```9(``*P!```!B```M`$```$;``"\
- XM`0```50``,`!```!U@``Q`$```&2``#(`0```8@``-`!```!&P``V`$```&&
- XM``#<`0```3L``.`!```!D@``Y`$```&(``#L`0```1L``/0!```!'```^`$`
- XM``$=``#\`0```1X````"```!'P``0"@C*6ME<FXM:6YE=#II;BYC"3$N,P!`
- XM*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y<SIT>7!E
- XM<RYH"3$N-2XX+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`0"@C
- XM*6AE860N<WES.F9S+W,U<&%R86TN:`DQ+C,N,BXQ`$`H(REH96%D+G-Y<SIS
- XM;V-K:6\N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SII;V-C;VTN:`DQ+C$N,2XQ
- XM`$`H(REH96%D+G-Y<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES.G-T
- XM<F]P=',N:`DQ+C0N-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS+C<N,@!`
- XM*",I:&5A9"YS>7,Z979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIS=')E
- XM86TN:`DQ+C0N,3,N,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ+C$N-RXQ`$`H
- XM(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z<&]L;"YH
- XM"3$N,RXR+C$`0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N,2XQ`$`H(REH
- XM96%D+G-Y<SIC<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@)
- XM,2XQ+C0N,0!`*",I:&5A9"YS>7,Z<V]C:V5T=F%R+F@),2XQ+C$N,0!`*",I
- XM:&5A9"YS>7,Z<')O=&]S=RYH"3$N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N
- XM-"XQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ`$`H(RDO=7-R+W-R8R]U
- XM=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ(#0N,"`P-2\R,B\Y,"`W
- XM,3`Q($%4)E0M55-,`$`H(REK97)N+6EN970Z:6Y?<WES=&TN:`DQ+C$N,RXQ
- XM`$`H(REK97)N+6EN970Z:6Y?=F%R+F@),2XQ+C(N,0!`*",I:V5R;BUN970Z
- XM868N:`DQ+C$N,RXQ`$`H(REK97)N+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C
- XM*6ME<FXM:6YE=#II<%]S='(N:`DQ+C$N,RXQ`&%C;VUP.B`H4T-$12D@-2XP
- XM("`P-"\Q.2\Y,`!O<'1I;3H@*%-#1$4I(#4N,"`@,#0O,3DO.3``87,Z("A3
- XM0T1%*2`U+C`@(#`T+S$Y+SDP`$`H(REK97)N+6EN970Z:6Y?8VMS=6TN8PDQ
- XM+C,`0"@C*6AE860N<WES.G1Y<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z
- XM<V5L96-T+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@),2XT+C$S
- XM+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A9"YS>7,Z
- XM=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N,BXQ`$`H
- XM(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z8W)E
- XM9"YH"3$N,2XR+C$`0"@C*6ME<FXM:6YE=#II;BYH"3$N,2XT+C$`0"@C*2]U
- XM<W(O<W)C+W5T<R]I,S@V+W-Y<R]B>71E;W)D97(N:"YS;"`Q+C$@-"XP(#`U
- XM+S(R+SDP(#<Q,#$@050F5"U54TP`0"@C*6AE860N<WES.F-M;E]E<G(N:`DQ
- XM+C,N,RXQ`&%C;VUP.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!O<'1I;3H@*%-#
- XM1$4I(#4N,"`@,#0O,3DO.3``87,Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`$`H
- XM(REK97)N+6EN970Z:6Y?<&-B+F,),2XS`$`H(REH96%D+G-Y<SIT>7!E<RYH
- XM"3$N-2XX+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`0"@C*6AE
- XM860N<WES.G!A<F%M+F@),2XS+C@N,@!`*",I:&5A9"YS>7,Z9G,O<S5P87)A
- XM;2YH"3$N,RXR+C$`0"@C*6AE860N<WES.G-Y<W1M+F@),2XS+C$P+C$`0"@C
- XM*6AE860N<WES.G-T<F5A;2YH"3$N-"XQ,RXQ`$`H(REH96%D+G-Y<SIV;F]D
- XM92YH"3$N,2XW+C$`0"@C*6AE860N<WES.G1I;64N:`DQ+C$N,RXQ`$`H(REH
- XM96%D+G-Y<SIP;VQL+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R;61E<"YH
- XM"3$N,2XQ+C$`0"@C*6AE860N<WES.F-R960N:`DQ+C$N,BXQ`$`H(REH96%D
- XM+G-Y<SIS=')L;V<N:`DQ+C,N-"XQ`$`H(REH96%D+G-Y<SIL;V<N:`DQ+C,N
- XM-"XQ`$`H(REH96%D+G-Y<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES
- XM.G1I:&1R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z=&EU<V5R+F@),2XS+C0N
- XM,@!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`*",I:&5A9"YS>7,Z
- XM<V]C:V5T=F%R+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z<V]C:VEO+F@),2XQ
- XM+C$N,0!`*",I:&5A9"YS>7,Z:6]C8V]M+F@),2XQ+C$N,0!`*",I:V5R;BUN
- XM970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ`$`H
- XM(RDO=7-R+W-R8R]U=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ(#0N
- XM,"`P-2\R,B\Y,"`W,3`Q($%4)E0M55-,`$`H(REK97)N+6EN970Z:6Y?<WES
- XM=&TN:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6Y?=F%R+F@),2XQ+C(N,0!`
- XM*",I:V5R;BUN970Z<F]U=&4N:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6Y?
- XM<&-B+F@),2XQ+C(N,0!`*",I:V5R;BUI;F5T.FEP+F@),2XQ+C(N,0!`*",I
- XM:V5R;BUI;F5T.FEP7W9A<BYH"3$N,2XS+C$`0"@C*6AE860N<WES.G!R;W1O
- XM<W<N:`DQ+C$`0"@C*6ME<FXM:6YE=#II<%]S='(N:`DQ+C$N,RXQ`$`H(REK
- XM97)N+6EN970Z:6YS<F5M+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z:VUE;2YH
- XM"3$N,2XS+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P=&EM.B`H
- XM4T-$12D@-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O,3DO.3``
- XM0"@C*6ME<FXM:6YE=#II;E]S=VET8V@N8PDQ+C,`0"@C*6AE860N<WES.G1Y
- XM<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z<V5L96-T+F@),2XQ+C$N,0!`
- XM*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y<SIF<R]S
- XM-7!A<F%M+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<WES=&TN:`DQ+C,N,3`N
- XM,0!`*",I:&5A9"YS>7,Z<VEG;F%L+F@),2XS+C@N,0!`*",I:&5A9"YS>7,Z
- XM8W)E9"YH"3$N,2XR+C$`0"@C*6AE860N<WES.G!R;V,N:`DQ+C,N,3,N,0!`
- XM*",I:&5A9"YS>7,Z:6UM=2YH"3$N-BXY+C$`0"@C*6AE860N<WES.G5S97(N
- XM:`DQ+C4N,34N,@!`*",I:&5A9"YS>7,Z<VEG:6YF;RYH"3$N,2XT+C$`0"@C
- XM*6AE860N<WES.G1S<RYH"3$N-"XQ+C$`0"@C*6AE860N<WES.G-E9RYH"3$N
- XM-2XS+C$`0"@C*6AE860N<WES.G)E<V]U<F-E+F@),2XQ+C0N,0!`*",I:&5A
- XM9"YS>7,Z97AE8RYH"3$N,2XY+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ
- XM+C<N,0!`*",I:&5A9"YS>7,Z=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES
- XM.FEO8W1L+F@),2XS+C<N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N."XQ
- XM`$`H(REH96%D+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z
- XM<W1R96%M+F@),2XT+C$S+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N,BXQ
- XM`$`H(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z
- XM<W1R;W!T<RYH"3$N-"XU+C$`0"@C*6AE860N<WES.F-O;F8N:`DQ+C,N-RXR
- XM`$`H(REH96%D+G-Y<SIE=F5C8BYH"3$N,2XQ+C$`0"@C*6AE860N<WES.G-T
- XM<FQO9RYH"3$N,RXT+C$`0"@C*6AE860N<WES.FQO9RYH"3$N,RXT+C$`0"@C
- XM*6AE860N<WES.F1E8G5G+F@),2XS+C0N,0!`*",I:&5A9"YS>7,Z<')O=&]S
- XM=RYH"3$N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`*",I:V5R
- XM;BUI;F5T.FEN+F@),2XQ+C0N,0!`*",I+W5S<B]S<F,O=71S+VDS.#8O<WES
- XM+V)Y=&5O<F1E<BYH+G-L(#$N,2`T+C`@,#4O,C(O.3`@-S$P,2!!5"94+553
- XM3`!`*",I:V5R;BUN970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6YE=#IA9BYH
- XM"3$N,2XS+C$`0"@C*6ME<FXM;F5T.G)O=71E+F@),2XQ+C,N,0!`*",I:V5R
- XM;BUI;F5T.FEN7W9A<BYH"3$N,2XR+C$`0"@C*6ME<FXM:6YE=#II<%]S='(N
- XM:`DQ+C$N,RXQ`&%C;VUP.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!O<'1I;3H@
- XM*%-#1$4I(#4N,"`@,#0O,3DO.3``87,Z("A30T1%*2`U+C`@(#`T+S$Y+SDP
- XM`$`H(REK97)N+6EN970Z:6Y?=')A;G-P+F,),2XS`$`H(REH96%D+G-Y<SIT
- XM>7!E<RYH"3$N-2XX+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`
- XM0"@C*6AE860N<WES.G!A<F%M+F@),2XS+C@N,@!`*",I:&5A9"YS>7,Z9G,O
- XM<S5P87)A;2YH"3$N,RXR+C$`0"@C*6AE860N<WES.G1I;64N:`DQ+C$N,RXQ
- XM`$`H(REH96%D+G-Y<SIS>7-M86-R;W,N:`DQ+C,N-BXQ`$`H(REH96%D+G-Y
- XM<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES.G-T<F]P=',N:`DQ+C0N
- XM-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS+C<N,@!`*",I:&5A9"YS>7,Z
- XM979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIS=')E86TN:`DQ+C0N,3,N
- XM,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ+C$N-RXQ`$`H(REH96%D+G-Y<SIP
- XM;VQL+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R;61E<"YH"3$N,2XQ+C$`
- XM0"@C*6AE860N<WES.F-R960N:`DQ+C$N,BXQ`$`H(REH96%D+G-Y<SIS=')L
- XM;V<N:`DQ+C,N-"XQ`$`H(REH96%D+G-Y<SIL;V<N:`DQ+C,N-"XQ`$`H(REK
- XM97)N+6EN970Z;FEH9'(N:`DQ+C$N,BXQ`$`H(REH96%D+G-Y<SID;'!I+F@)
- XM,2XQ+C,N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`*",I:&5A
- XM9"YS>7,Z<V]C:VEO+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z:6]C8V]M+F@)
- XM,2XQ+C$N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6YE
- XM=#IS=')I;V,N:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ
- XM`$`H(RDO=7-R+W-R8R]U=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ
- XM(#0N,"`P-2\R,B\Y,"`W,3`Q($%4)E0M55-,`$`H(REK97)N+6EN970Z:6Y?
- XM=F%R+F@),2XQ+C(N,0!`*",I:V5R;BUN970Z<F]U=&4N:`DQ+C$N,RXQ`$`H
- XM(REK97)N+6EN970Z:7!?<W1R+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FEP
- XM7W9A<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II;E]P8V(N:`DQ+C$N,BXQ
- XM`$`H(REH96%D+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z
- XM:VUE;2YH"3$N,2XS+C$`0"@C*6AE860N<WES.G1I;6]D+F@),2XS+C0N,0!A
- XM8V]M<#H@*%-#1$4I(#4N,"`@,#0O,3DO.3``;W!T:6TZ("A30T1%*2`U+C`@
- XM(#`T+S$Y+SDP`&%S.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!`*",I:V5R;BUI
- XM;F5T.FEP7VEN<'5T+F,),2XS`$`H(REH96%D+G-Y<SIT>7!E<RYH"3$N-2XX
- XM+C$`0"@C*6AE860N<WES.G-E;&5C="YH"3$N,2XQ+C$`0"@C*6AE860N<WES
- XM.G!A<F%M+F@),2XS+C@N,@!`*",I:&5A9"YS>7,Z9G,O<S5P87)A;2YH"3$N
- XM,RXR+C$`0"@C*6AE860N<WES.G-Y<W1M+F@),2XS+C$P+C$`0"@C*6AE860N
- XM<WES.G-T<F]P=',N:`DQ+C0N-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS
- XM+C<N,@!`*",I:&5A9"YS>7,Z979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y
- XM<SIS=')E86TN:`DQ+C0N,3,N,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ+C$N
- XM-RXQ`$`H(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z
- XM<&]L;"YH"3$N,RXR+C$`0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N,2XQ
- XM`$`H(REH96%D+G-Y<SIC<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z<W1R
- XM;&]G+F@),2XS+C0N,0!`*",I:&5A9"YS>7,Z;&]G+F@),2XS+C0N,0!`*",I
- XM:&5A9"YS>7,Z<')O=&]S=RYH"3$N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@)
- XM,2XQ+C0N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N."XQ`$`H(REH96%D
- XM+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N
- XM-"XQ`$`H(REK97)N+6EN970Z:6XN:`DQ+C$N-"XQ`$`H(RDO=7-R+W-R8R]U
- XM=',O:3,X-B]S>7,O8GET96]R9&5R+F@N<VP@,2XQ(#0N,"`P-2\R,B\Y,"`W
- XM,3`Q($%4)E0M55-,`$`H(REK97)N+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C
- XM*6ME<FXM:6YE=#II;E]P8V(N:`DQ+C$N,BXQ`$`H(REK97)N+6EN970Z:6Y?
- XM<WES=&TN:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:6Y?=F%R+F@),2XQ+C(N
- XM,0!`*",I:V5R;BUI;F5T.FEP+F@),2XQ+C(N,0!`*",I:V5R;BUI;F5T.FEP
- XM7W9A<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II<%]I8VUP+F@),2XQ+C(N
- XM,0!`*",I:V5R;BUI;F5T.FEP7W-T<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE
- XM=#IT8W`N:`DQ+C$N,BXQ`$`H(REK97)N+6EN970Z:6YS<F5M+F@),2XQ+C,N
- XM,0!`*",I:V5R;BUI;F5T.FYI:&1R+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z
- XM:VUE;2YH"3$N,2XS+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P
- XM=&EM.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O
- XM,3DO.3``0"@C*6ME<FXM:6YE=#II<%]O=71P=70N8PDQ+C,`0"@C*6AE860N
- XM<WES.G1Y<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z<V5L96-T+F@),2XQ
- XM+C$N,0!`*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y
- XM<SIF<R]S-7!A<F%M+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@)
- XM,2XT+C$S+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A
- XM9"YS>7,Z=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N
- XM,BXQ`$`H(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS
- XM>7,Z8W)E9"YH"3$N,2XR+C$`0"@C*6AE860N<WES.G-T<F]P=',N:`DQ+C0N
- XM-2XQ`$`H(REH96%D+G-Y<SIC;VYF+F@),2XS+C<N,@!`*",I:&5A9"YS>7,Z
- XM979E8V(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIS=')L;V<N:`DQ+C,N-"XQ
- XM`$`H(REH96%D+G-Y<SIE<G)N;RYH"3$N,RXX+C$`0"@C*6AE860N<WES.F-M
- XM;E]E<G(N:`DQ+C,N,RXQ`$`H(REH96%D+G-Y<SIS;V-K970N:`DQ+C$N-"XQ
- XM`$`H(REH96%D+G-Y<SIS;V-K971V87(N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y
- XM<SIP<F]T;W-W+F@),2XQ`$`H(REK97)N+6YE=#II9BYH"3$N,2XT+C$`0"@C
- XM*6ME<FXM:6YE=#II;BYH"3$N,2XT+C$`0"@C*2]U<W(O<W)C+W5T<R]I,S@V
- XM+W-Y<R]B>71E;W)D97(N:"YS;"`Q+C$@-"XP(#`U+S(R+SDP(#<Q,#$@050F
- XM5"U54TP`0"@C*6ME<FXM:6YE=#II;E]V87(N:`DQ+C$N,BXQ`$`H(REK97)N
- XM+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II;E]S>7-T;2YH
- XM"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II<"YH"3$N,2XR+C$`0"@C*6ME<FXM
- XM:6YE=#II<%]V87(N:`DQ+C$N,RXQ`$`H(REK97)N+6EN970Z:7!?:6-M<"YH
- XM"3$N,2XR+C$`0"@C*6ME<FXM:6YE=#II;E]P8V(N:`DQ+C$N,BXQ`$`H(REH
- XM96%D+G-Y<SID;'!I+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FYI:&1R+F@)
- XM,2XQ+C(N,0!`*",I:V5R;BUI;F5T.FEP7W-T<BYH"3$N,2XS+C$`86-O;7`Z
- XM("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P=&EM.B`H4T-$12D@-2XP("`P-"\Q
- XM.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O,3DO.3``0"@C*6ME<FXM:6YE=#II
- XM<%]M86EN+F,),2XS+C$N,0!`*",I:&5A9"YS>7,Z='EP97,N:`DQ+C4N."XQ
- XM`$`H(REH96%D+G-Y<SIS96QE8W0N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIP
- XM87)A;2YH"3$N,RXX+C(`0"@C*6AE860N<WES.F9S+W,U<&%R86TN:`DQ+C,N
- XM,BXQ`$`H(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS>7,Z
- XM<WES;6%C<F]S+F@),2XS+C8N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N
- XM."XQ`$`H(REH96%D+G-Y<SIS=')O<'1S+F@),2XT+C4N,0!`*",I:&5A9"YS
- XM>7,Z8V]N9BYH"3$N,RXW+C(`0"@C*6AE860N<WES.F5V96-B+F@),2XQ+C$N
- XM,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@),2XT+C$S+C$`0"@C*6AE860N<WES
- XM.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A9"YS>7,Z<&]L;"YH"3$N,RXR+C$`
- XM0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y<SIC
- XM<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z<W1R;&]G+F@),2XS+C0N,0!`
- XM*",I:&5A9"YS>7,Z;&]G+F@),2XS+C0N,0!`*",I:V5R;BUI;F5T.FYI:&1R
- XM+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z9&QP:2YH"3$N,2XS+C$`0"@C*6AE
- XM860N<WES.G-O8VME="YH"3$N,2XT+C$`0"@C*6AE860N<WES.G-O8VMI;RYH
- XM"3$N,2XQ+C$`0"@C*6AE860N<WES.FEO8V-O;2YH"3$N,2XQ+C$`0"@C*6ME
- XM<FXM;F5T.FEF+F@),2XQ+C0N,0!`*",I:V5R;BUN970Z<W1R:6]C+F@),2XQ
- XM+C,N,0!`*",I:V5R;BUI;F5T.FEN+F@),2XQ+C0N,0!`*",I+W5S<B]S<F,O
- XM=71S+VDS.#8O<WES+V)Y=&5O<F1E<BYH+G-L(#$N,2`T+C`@,#4O,C(O.3`@
- XM-S$P,2!!5"94+5533`!`*",I:V5R;BUI;F5T.FEN7W9A<BYH"3$N,2XR+C$`
- XM0"@C*6ME<FXM;F5T.G)O=71E+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FEP
- XM7W-T<BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II<%]V87(N:`DQ+C$N,RXQ
- XM`$`H(REH96%D+G-Y<SIC;6Y?97)R+F@),2XS+C,N,0!`*",I:&5A9"YS>7,Z
- XM:VUE;2YH"3$N,2XS+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P
- XM=&EM.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O
- XM,3DO.3``0"@C*6ME<FXM:6YE=#IN971L:6(N8PDQ+C,`0"@C*6AE860N<WES
- XM.G1Y<&5S+F@),2XU+C@N,0!`*",I:&5A9"YS>7,Z<V5L96-T+F@),2XQ+C$N
- XM,0!`*",I:&5A9"YS>7,Z<&%R86TN:`DQ+C,N."XR`$`H(REH96%D+G-Y<SIF
- XM<R]S-7!A<F%M+F@),2XS+C(N,0!`*",I:&5A9"YS>7,Z<W1R96%M+F@),2XT
- XM+C$S+C$`0"@C*6AE860N<WES.G9N;V1E+F@),2XQ+C<N,0!`*",I:&5A9"YS
- XM>7,Z=&EM92YH"3$N,2XS+C$`0"@C*6AE860N<WES.G!O;&PN:`DQ+C,N,BXQ
- XM`$`H(REH96%D+G-Y<SIS=')M9&5P+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z
- XM8W)E9"YH"3$N,2XR+C$`0"@C*6AE860N<WES.F5R<FYO+F@),2XS+C@N,0!`
- XM*",I:&5A9"YS>7,Z<WES;6%C<F]S+F@),2XS+C8N,0!`*",I:&5A9"YS>7,Z
- XM9&5B=6<N:`DQ+C,N-"XQ`$`H(REH96%D+G-Y<SIS:6=N86PN:`DQ+C,N."XQ
- XM`$`H(REH96%D+G-Y<SIP<F]C+F@),2XS+C$S+C$`0"@C*6AE860N<WES.FEM
- XM;74N:`DQ+C8N.2XQ`$`H(REH96%D+G-Y<SIU<V5R+F@),2XU+C$U+C(`0"@C
- XM*6AE860N<WES.G-I9VEN9F\N:`DQ+C$N-"XQ`$`H(REH96%D+G-Y<SIT<W,N
- XM:`DQ+C0N,2XQ`$`H(REH96%D+G-Y<SIS96<N:`DQ+C4N,RXQ`$`H(REH96%D
- XM+G-Y<SIR97-O=7)C92YH"3$N,2XT+C$`0"@C*6AE860N<WES.F5X96,N:`DQ
- XM+C$N.2XQ`$`H(REH96%D+G-Y<SIT:6AD<BYH"3$N,RXS+C$`0"@C*6AE860N
- XM<WES.G1I=7-E<BYH"3$N,RXT+C(`0"@C*6AE860N<WES.G-O8VME="YH"3$N
- XM,2XT+C$`0"@C*6ME<FXM;F5T.G-T<FEO8RYH"3$N,2XS+C$`0"@C*6AE860N
- XM<WES.G-O8VME='9A<BYH"3$N,2XQ+C$`0"@C*6ME<FXM:6YE=#II;BYH"3$N
- XM,2XT+C$`0"@C*2]U<W(O<W)C+W5T<R]I,S@V+W-Y<R]B>71E;W)D97(N:"YS
- XM;"`Q+C$@-"XP(#`U+S(R+SDP(#<Q,#$@050F5"U54TP`0"@C*6ME<FXM;F5T
- XM.G)O=71E+F@),2XQ+C,N,0!`*",I:V5R;BUI;F5T.FEN7W!C8BYH"3$N,2XR
- XM+C$`86-O;7`Z("A30T1%*2`U+C`@(#`T+S$Y+SDP`&]P=&EM.B`H4T-$12D@
- XM-2XP("`P-"\Q.2\Y,`!A<SH@*%-#1$4I(#4N,"`@,#0O,3DO.3``0"@C*6ME
- XM<FXM:6YE=#IR;W5T92YC"3$N,P!`*",I:&5A9"YS>7,Z='EP97,N:`DQ+C4N
- XM."XQ`$`H(REH96%D+G-Y<SIS96QE8W0N:`DQ+C$N,2XQ`$`H(REH96%D+G-Y
- XM<SIP87)A;2YH"3$N,RXX+C(`0"@C*6AE860N<WES.F9S+W,U<&%R86TN:`DQ
- XM+C,N,BXQ`$`H(REH96%D+G-Y<SIS>7-T;2YH"3$N,RXQ,"XQ`$`H(REH96%D
- XM+G-Y<SIS=')E86TN:`DQ+C0N,3,N,0!`*",I:&5A9"YS>7,Z=FYO9&4N:`DQ
- XM+C$N-RXQ`$`H(REH96%D+G-Y<SIT:6UE+F@),2XQ+C,N,0!`*",I:&5A9"YS
- XM>7,Z<&]L;"YH"3$N,RXR+C$`0"@C*6AE860N<WES.G-T<FUD97`N:`DQ+C$N
- XM,2XQ`$`H(REH96%D+G-Y<SIC<F5D+F@),2XQ+C(N,0!`*",I:&5A9"YS>7,Z
- XM<')O=&]S=RYH"3$N,0!`*",I:&5A9"YS>7,Z<V]C:V5T+F@),2XQ+C0N,0!`
- XM*",I:&5A9"YS>7,Z<V]C:VEO+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z:6]C
- XM8V]M+F@),2XQ+C$N,0!`*",I:&5A9"YS>7,Z97)R;F\N:`DQ+C,N."XQ`$`H
- XM(REH96%D+G-Y<SIS=')O<'1S+F@),2XT+C4N,0!`*",I:&5A9"YS>7,Z8V]N
- XM9BYH"3$N,RXW+C(`0"@C*6AE860N<WES.F5V96-B+F@),2XQ+C$N,0!`*",I
- XM:&5A9"YS>7,Z<W1R;&]G+F@),2XS+C0N,0!`*",I:&5A9"YS>7,Z;&]G+F@)
- XM,2XS+C0N,0!`*",I:V5R;BUN970Z:68N:`DQ+C$N-"XQ`$`H(REK97)N+6YE
- XM=#IA9BYH"3$N,2XS+C$`0"@C*6ME<FXM:6YE=#II;BYH"3$N,2XT+C$`0"@C
- XM*2]U<W(O<W)C+W5T<R]I,S@V+W-Y<R]B>71E;W)D97(N:"YS;"`Q+C$@-"XP
- XM(#`U+S(R+SDP(#<Q,#$@050F5"U54TP`0"@C*6ME<FXM:6YE=#II;E]V87(N
- XM:`DQ+C$N,BXQ`$`H(REK97)N+6YE=#IR;W5T92YH"3$N,2XS+C$`0"@C*6AE
- XM860N<WES.F-M;E]E<G(N:`DQ+C,N,RXQ`$`H(REK97)N+6EN970Z:7!?<W1R
- XM+F@),2XQ+C,N,0!A8V]M<#H@*%-#1$4I(#4N,"`@,#0O,3DO.3``;W!T:6TZ
- XM("A30T1%*2`U+C`@(#`T+S$Y+SDP`&%S.B`H4T-$12D@-2XP("`P-"\Q.2\Y
- XM,`!`*",I:V5R;BUI;F5T.FEP7W9E<G,N8PDQ+C,`0"@C*6AE860N<WES.F-M
- XM;E]E<G(N:`DQ+C,N,RXQ`&%C;VUP.B`H4T-$12D@-2XP("`P-"\Q.2\Y,`!O
- XM<'1I;3H@*%-#1$4I(#4N,"`@,#0O,3DO.3``87,Z("A30T1%*2`U+C`@(#`T
- XM+S$Y+SDP````````````````````````````````````````````````````
- XM```````!`````0````8`````````-````!!F``````````````0`````````
- XM!P````$````"`````````$1F```\```````````````$``````````\````!
- XM`````P````````"`9@``*`(`````````````!``````````5`````0````,`
- XM````````J&@``.P$``````````````0`````````'`````@````#````````
- XM`)1M``"H```````````````$`````````"$````"``````````````"4;0``
- XM,`X```<````E````!````!`````I`````P``````````````Q'L``"((````
- XM``````````$`````````,0````,``````````````.:#``!D````````````
- XM```!`````````#L````)``````````````!,A```:!4```8````!````!```
- XM``@```!%````"0``````````````M)D``'@````&`````@````0````(````
- XM40````D``````````````"R:```@`0``!@````,````$````"````%L````!
- XC``````````````!,FP``02D``````````````0``````````
- X`
- Xend
- END_OF_FILE
- if test 20206 -ne `wc -c <'driver/v2.ip.fix/Driver.UU.02'`; then
- echo shar: \"'driver/v2.ip.fix/Driver.UU.02'\" unpacked with wrong size!
- fi
- # end of 'driver/v2.ip.fix/Driver.UU.02'
- fi
- if test ! -d 'man' ; then
- echo shar: Creating directory \"'man'\"
- mkdir 'man'
- fi
- if test ! -d 'man/man1' ; then
- echo shar: Creating directory \"'man/man1'\"
- mkdir 'man/man1'
- fi
- if test ! -d 'man/man7' ; then
- echo shar: Creating directory \"'man/man7'\"
- mkdir 'man/man7'
- fi
- if test ! -d 'utils' ; then
- echo shar: Creating directory \"'utils'\"
- mkdir 'utils'
- fi
- echo shar: End of archive 1 \(of 4\).
- cp /dev/null ark1isdone
- MISSING=""
- for I in 1 2 3 4 ; do
- if test ! -f ark${I}isdone ; then
- MISSING="${MISSING} ${I}"
- fi
- done
- if test "${MISSING}" = "" ; then
- echo You have unpacked all 4 archives.
- rm -f ark[1-9]isdone
- else
- echo You still must unpack the following archives:
- echo " " ${MISSING}
- fi
- exit 0
- exit 0 # Just in case...
-